import * as $utils from '@/common/comFun/utils.js';

import layer from '@/common/comFun/layerFun.js';

const APP = function() {
	return {
		LoginIP: function() {
			// return '39.105.222.87:10015'
			return 'mes.hzyc.org.cn:20050'
		},
		/**
		 * 获取协议类型 http:// 或 https://
		 */
		IPAgreement: function(data) {
			if (data) {
				return uni.setStorageSync('IPAgreement', data);
			} else {
				return uni.getStorageSync('IPAgreement');
				// return 'http://'
			}
		},
		UserInfo: function(data) {
			if (data) {
				return uni.setStorageSync('UserInfo', data);
			} else {
				return uni.getStorageSync('UserInfo');
			}
		},
		/**
		 * 根据是否传入值返回对应IP地址。
		 * '39.105.222.87:20000' 	正常请求接口
		 * '106.15.33.39:9981' 		PC商城资源需要
		 * @param {string} data 有值就行
		 */
		ShopServiceIP: function(data) {
			if (data) {
				return '39.105.222.87:20000';
			} else {
				return '106.15.33.39:9981';
			}
		},
		getUserInfo() {
			if (uni.getStorageSync('UserInfo')) {
				return JSON.parse(uni.getStorageSync('UserInfo'))
			} else {
				return null;
			}
		},
		serverIP: function(ip) {
			if (ip) {
				return uni.setStorageSync('serverIP', ip);
			} else {
				return uni.getStorageSync('serverIP');
			}
		},
		/** 请求方式1：回调直接获取接口数据
		 * @param cmd 	接口名
		 * @param param 	参数
		 * @param successCallback 	成功的回调
		 * @param errorCallback 	失败的回调
		 * @param IP 	IP地址（传入则使用传入的IP地址，不传则使用存储的IP地址）
		 * @param data 	区分走哪个  1 -- '?cmdname='; 2 --'?cmd=' ; 不传 -- 无 
		 */
		request: function(cmd, param, successCallback, errorCallback, IP, data) {
			// uni.onNetworkStatusChange(function(res) {
			// 	if (!res.isConnected) {
			// 		uni.showToast({
			// 			title: '网络连接不可用！',
			// 			icon: 'none'
			// 		});
			// 	}
			// 	return false
			// });
			uni.getNetworkType({
				success: function(res) {
					if (res.networkType === 'none') {
						uni.showToast({
							title: '无网络连接',
							icon: 'none'
						});
						if (errorCallback) errorCallback({
							msg: '无网络连接'
						});
						return;
					}
					var url = ''
					if (IP) {
						if (data == 1) {
							url = IP + '?cmdname=' + cmd;
						} else if (data == 2) {
							url = IP + '?cmd=' + cmd;
						} else {
							url = IP
						}
					} else {
						url = APP.IPAgreement() + APP.serverIP() + '/Frame/SqlData?cmdname=' + cmd;
					}
					// console.log(APP.getUserInfo());
					if (APP.getUserInfo()) {
						if (!param.hasOwnProperty("P_UserID")) {
							param.P_UserID = APP.getUserInfo().UserID;
						};
						if (!param.hasOwnProperty("P_UserName")) {
							param.P_UserName = APP.getUserInfo().UserName;
						};
						if (!param.hasOwnProperty("P_UserCode")) {
							param.P_UserCode = APP.getUserInfo().UserCode;
						};
						if (!param.hasOwnProperty("P_EmplID")) {
							param.P_EmplID = APP.getUserInfo().EmplID;
						};
						if (!param.hasOwnProperty("P_EmplName")) {
							param.P_EmplName = APP.getUserInfo().EmplName;
						};
					}

					uni.request({
						url: url,
						data: param,
						method: 'POST',
						timeout: 10000,
						header: {
							'content-type': 'application/x-www-form-urlencoded;charset=utf-8',
							'username': encodeURIComponent(APP.getUserInfo().UserName)
						},
						success: (ret, err) => {
							if (ret) {
								if (ret.data.status == 200) {
									if (successCallback) successCallback(ret.data);
								} else {

									$utils.hideLoading();

									let IPData = APP.serverIP()
									if (IP) {
										IPData = IP
									}


									if (process.env.NODE_ENV === 'development') {
										uni.showToast({
											title: cmd + '\n' + IPData + '\n' +
												'错误代码1:' +
												'\n' + JSON.stringify(ret),
											icon: 'none'
										});
									} else {
										layer.alert(JSON.stringify(ret.data.msg))
									}

									if (errorCallback) errorCallback(ret.data);
								}
							} else {
								$utils.hideLoading();
								if (errorCallback) {
									errorCallback(err);
								} else {
									console.log(JSON.stringify(err))
								}
							}
						}
					});

				},
				fail: function() {
					uni.showToast({
						title: '无法获取网络状态',
						icon: 'none'
					});
					if (errorCallback) errorCallback({
						msg: '无法获取网络状态'
					});
					return;
				}
			});

		},
		requestByUrl: function(requestUrl, param, successCallback, errorCallback, IP, data) {
			// uni.onNetworkStatusChange(function(res) {
			// 	if (!res.isConnected) {
			// 		uni.showToast({
			// 			title: '网络连接不可用！',
			// 			icon: 'none'
			// 		});
			// 	}
			// 	return false
			// });

			uni.getNetworkType({
				success: function(res) {
					if (res.networkType === 'none') {
						uni.showToast({
							title: '无网络连接',
							icon: 'none'
						});
						if (errorCallback) errorCallback({
							msg: '无网络连接'
						});
						return;
					}


					var url = ''
					if (IP) {
						if (data == 1) {
							url = IP + '?cmdname=' + cmd;
						} else if (data == 2) {
							url = IP + '?cmd=' + cmd;
						} else {
							url = IP
						}
					} else {
						url = APP.IPAgreement() + APP.serverIP() + requestUrl;
					}
					if (APP.getUserInfo()) {
						if (!param.hasOwnProperty("P_UserID")) {
							param.P_UserID = APP.getUserInfo().UserID;
						}
						if (!param.hasOwnProperty("P_UserName")) {
							param.P_UserName = APP.getUserInfo().UserName;
						}
						if (!param.hasOwnProperty("P_UserCode")) {
							param.P_UserCode = APP.getUserInfo().UserCode;
						}
						if (!param.hasOwnProperty("P_EmplID")) {
							param.P_EmplID = APP.getUserInfo().EmplID;
						}
					}

					uni.request({
						url: url,
						data: param,
						method: 'POST',
						header: {
							'content-type': 'application/x-www-form-urlencoded;charset=utf-8',
							'username': encodeURIComponent(APP.getUserInfo().UserName)
						},
						success: (ret) => {
							// console.log(ret)
							if (ret) {
								if (ret.data.status == 200) {
									if (successCallback) successCallback(ret.data.data);
								} else {
									$utils.hideLoading();

									if (process.env.NODE_ENV === 'development') {

										uni.showToast({
											title: APP.serverIP() + '\n' +
												'错误代码1:' + '\n' + JSON
												.stringify(ret),
											icon: 'none'
										});
									}
									// alert(cmd + '\n' + APP.serverIP() + '\n' + '错误代码1:' + '\n' + JSON
									// 	.stringify(ret));
									if (errorCallback) errorCallback(ret.data);
								}
							} else {
								$utils.hideLoading();
								if (errorCallback) {
									errorCallback(err);
								} else {
									console.log(JSON.stringify(err))
									// alert(cmd + '\n' + APP.serverIP() + '\n' + '错误代码2:' + '\n' + JSON
									// 	.stringify(err));
								}
							}
						}
					});

				},
				fail: function() {
					uni.showToast({
						title: '无法获取网络状态',
						icon: 'none'
					});
					if (errorCallback) errorCallback({
						msg: '无法获取网络状态'
					});
					return;
				}
			});
		},
		/** 异步请求方法，返回Promise回调信息，主要用于连续调用多个接口后复制数据
		 * @param cmd 	接口名
		 * @param param 	参数
		 * @param successCallback 	成功的回调
		 * @param errorCallback 	失败的回调
		 * @param IP 	IP地址（传入则使用传入的IP地址，不传则使用存储的IP地址）
		 * @param data 	区分走哪个  1 -- '?cmdname='; 2 --'?cmd=' ; 不传 -- 无 
		 */
		PromiseRequestByUrl: function(requestUrl, param, IP, data) {
			let requestTask; // 存储请求对象
			const promise = new Promise((resolve, reject) => {
				var url = ''
				if (IP) {
					if (data == 1) {
						url = IP + '?cmdname=' + cmd;
					} else if (data == 2) {
						url = IP + '?cmd=' + cmd;
					} else {
						url = IP
					}
				} else {
					url = APP.IPAgreement() + APP.serverIP() + requestUrl;
				}
				if (APP.getUserInfo()) {
					if (!param.hasOwnProperty("P_UserID")) {
						param.P_UserID = APP.getUserInfo().UserID;
					}
					if (!param.hasOwnProperty("P_UserName")) {
						param.P_UserName = APP.getUserInfo().UserName;
					}
					if (!param.hasOwnProperty("P_UserCode")) {
						param.P_UserCode = APP.getUserInfo().UserCode;
					}
					if (!param.hasOwnProperty("P_EmplID")) {
						param.P_EmplID = APP.getUserInfo().EmplID;
					}
				}

				requestTask = uni.request({
					url: url,
					data: param,
					method: 'POST',
					header: {
						'content-type': 'application/x-www-form-urlencoded;charset=utf-8',
						'username': encodeURIComponent(APP.getUserInfo().UserName)
					},
					success: (ret) => {
						if (ret) {
							if (ret.data.status == 200) {
								resolve(ret.data); // 请求成功，使用 resolve 处理结果
							} else {
								if (process.env.NODE_ENV === 'development') {
									// uni.showToast({
									// 	title: APP.serverIP() + '\n' + '错误代码1:' +
									// 		'\n' +
									// 		JSON.stringify(ret),
									// 	icon: 'none'
									// });
									layer.alert(JSON.stringify(ret.data.msg))
								} else {
									layer.alert(JSON.stringify(ret.data.msg))
								}
								reject(ret.data); // 请求失败，使用 reject 处理错误
							}
						} else {
							reject('Request failed'); // 请求失败，使用 reject 处理错误
						}
					},
					fail: (err) => {
						reject(err); // 请求失败，使用 reject 处理错误
					}
				});
			});

			// 返回Promise对象和请求对象
			return {
				promise: promise,
				requestTask: requestTask
			};
		},
		/** 异步请求方法，返回Promise回调信息，主要用于连续调用多个接口后复制数据
		 * @param cmd 	接口名
		 * @param param 	参数
		 * @param successCallback 	成功的回调
		 * @param errorCallback 	失败的回调
		 * @param IP 	IP地址（传入则使用传入的IP地址，不传则使用存储的IP地址）
		 * @param data 	区分走哪个  1 -- '?cmdname='; 2 --'?cmd=' ; 不传 -- 无 
		 */
		PromiseRequest: function(cmd, param, IP, data) {
			let requestTask; // 存储请求对象
			const promise = new Promise((resolve, reject) => {
				var url = ''
				if (IP) {
					if (data == 1) {
						url = IP + '?cmdname=' + cmd;
					} else if (data == 2) {
						url = IP + '?cmd=' + cmd;
					} else {
						url = IP
					}
				} else {
					url = APP.IPAgreement() + APP.serverIP() + '/Frame/SqlData?cmdname=' + cmd;
				}

				if (APP.getUserInfo()) {
					if (!param.hasOwnProperty("P_UserID")) {
						param.P_UserID = APP.getUserInfo().UserID;
					}
					if (!param.hasOwnProperty("P_UserName")) {
						param.P_UserName = APP.getUserInfo().UserName;
					}
					if (!param.hasOwnProperty("P_UserCode")) {
						param.P_UserCode = APP.getUserInfo().UserCode;
					}
					if (!param.hasOwnProperty("P_EmplID")) {
						param.P_EmplID = APP.getUserInfo().EmplID;
					}
				}
				requestTask = uni.request({
					url: url,
					data: param,
					method: 'POST',
					header: {
						'content-type': 'application/x-www-form-urlencoded;charset=utf-8',
						'username': encodeURIComponent(APP.getUserInfo().UserName)
					},
					success: (ret) => {
						if (ret) {
							if (ret.data.status == 200) {
								resolve(ret.data); // 请求成功，使用 resolve 处理结果
							} else {
								reject(ret.data); // 请求失败，使用 reject 处理错误
							}
						} else {
							reject('Request failed'); // 请求失败，使用 reject 处理错误
						}
					},
					fail: (err) => {
						reject(err); // 请求失败，使用 reject 处理错误
					}
				});
			});

			// 返回Promise对象和请求对象
			return {
				promise: promise,
				requestTask: requestTask
			};
		},
		/** 比较版本号 
		 * 返回值： 0 高于服务器版本； 1 与服务器版本一致； 2 低于服务器版本；
		 * @param {String} OldV 从服务器获取的版本号 
		 * @param {String} NewV 从本机获取的版本号 
		 */
		versionFn: function(NewV, OldV) {
			var curV = NewV,
				reqV = OldV,
				curArr = curV.split('.'),
				reqArr = reqV.split('.'),
				maxL = Math.max(curArr.length, reqArr.length),
				index = 0,
				diff = 0;

			if (reqArr.length != maxL) {
				reqArr.push("0");
			}

			while (index < maxL) {
				diff = parseInt(curArr[index]) > parseInt(reqArr[index]) ? 1 : (parseInt(curArr[index]) ==
					parseInt(
						reqArr[index]) ? 0 : -1);
				if (diff != 0) {
					break;
				}
				index++;
			}

			if (diff > 0) {
				return 2
			} else if (diff == 0) {
				return 1
			} else {
				return 0
			}
		},
		/**
		 * 判断传入的值受否为空
		 * @param  {string}  value  传入的值
		 * @return {object} 返回布尔值 true | false
		 */
		isEmpty: function(value) {
			if (typeof value === 'undefined' || value === null) {
				return true;
			}

			if (typeof value === 'string' && value.trim() === '') {
				return true;
			}

			if (Array.isArray(value) && value.length === 0) {
				return true;
			}

			if (typeof value === 'object' && Object.keys(value).length === 0) {
				return true;
			}

			return false;
		},
		dateFormat(date, fmt) {
			date = new Date(date)

			var a = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']
			var o = {
				'Y': date.getFullYear(),
				'M+': date.getMonth() + 1, // 月份
				'd+': date.getDate(), // 日
				'h+': date.getHours(), // 小时
				'm+': date.getMinutes(), // 分
				's+': date.getSeconds(), // 秒
				'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
				'S': date.getMilliseconds(), // 毫秒
				'w': date.getDay(), // 周
				'W': a[date.getDay()], // 大写周
				'T': 'T'
			}
			if (/(y+)/.test(fmt)) {
				fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
			}
			for (var k in o) {
				if (new RegExp('(' + k + ')').test(fmt)) {
					fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[
						k]).length)))
				}
			}
			return fmt
		},
		getFormatDate: function(date) {
			if (!date) date = new Date();
			var seperator1 = "-";
			var seperator2 = ":";
			var month = date.getMonth() + 1;
			var strDate = date.getDate();
			var hour = date.getHours();
			var minute = date.getMinutes();
			var second = date.getSeconds();
			if (month >= 1 && month <= 9) {
				month = "0" + month;
			}
			if (strDate >= 0 && strDate <= 9) {
				strDate = "0" + strDate;
			}
			if (hour >= 0 && hour <= 9) {
				hour = "0" + hour;
			}
			if (minute >= 0 && minute <= 9) {
				minute = "0" + minute;
			}
			if (second >= 0 && second <= 9) {
				second = "0" + second;
			}
			var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate +
				" " + hour + seperator2 + minute +
				seperator2 + second;
			return currentdate;
		},
		getRealDate(startDate) {
			// let newDate = new Date(Number(startDate));
			return APP.dateFormat(new Date(startDate), "yyyy-MM-dd hh:mm:ss");

			// let newDate = new Date(Number(startDate));
			// return APP.dateFormat(newDate, "yyyy-MM-dd hh:mm:ss");
		},
	}
}()
export default APP